package com.info.zhiduoduo.common.utils;

import java.math.BigDecimal;
import java.text.DecimalFormat;

public class MathUtils {

	/**
	 * 提供精确的加法运算。
	 *
	 * @param value1 被加数
	 * @param value2 加数
	 * @return 两个参数的和
	 */
	public static Double add(Double value1, Double value2) {
		BigDecimal b1 = new BigDecimal(Double.toString(value1));
		BigDecimal b2 = new BigDecimal(Double.toString(value2));
		return b1.add(b2).doubleValue();
	}

	/**
	 * 提供精确的减法运算。
	 *
	 * @param value1 被减数
	 * @param value2 减数
	 * @return 两个参数的差
	 */
	public static double sub(Double value1, Double value2) {
		BigDecimal b1 = new BigDecimal(Double.toString(value1));
		BigDecimal b2 = new BigDecimal(Double.toString(value2));
		return b1.subtract(b2).doubleValue();
	}

	/**
	 使用BigDecimal格式化float小数点位数. 四舍五入的方式

	 @param value
	 @param scale 保留的小数点位数.必须大于等于1.
	 @return
	 */
	public static float FormatFloatPoint(float value, int scale) {
		if (scale < 1) {
			scale = 1;
		}
		BigDecimal big = new BigDecimal(Float.toString(value));
		float result = big.setScale(scale, BigDecimal.ROUND_HALF_UP).floatValue();
		return result;
	}

	/**
	 简单的格式化float小数点位数. 四舍五入的方式

	 @param value
	 @param scale 保留的小数点位数.必须大于等于1.
	 @return
	 */
	public static float formatFloat(float value, int scale) {
		if (scale < 1) {
			scale = 1;
		}
		int pow = (int) Math.pow(10, scale);
		return Math.round(value * pow) * 1.0f / pow;
	}

	/**
	 保留2位小数点, 0也显示,适用于显示价格的float
	 @param f
	 @return
	 */
	public static String formatFloat2_0(float f) {
		DecimalFormat df = new DecimalFormat("0.00");
		return df.format(f);
	}
}
